package com.tedu.api.thread;
/**
 * 线程------创建 3种
 * 第一种:子类 继承Thread方案  --【使用率不多】
 *     ①编写子类 MyThread1 继承 Thread
 *     ②子类，重写run方法【线程运行】
 *     ③实例化 MyThread1 对象 调用start方法【启动线程】
 *
 * 第二种：子类  实现Runnable接口 方案--【推荐用法】
 *      ①编写子类MyRunnable1 实现 Runnable 接口
 *      ②子类，强制重写run方法【线程运行】
 *      ③实例化MyRunnable1对象【没有start方法】
 *      ④创建Thread对象，把实例化MyRunnable 对象通过构造器
 *      ⑤调用Thread对象  start方法
 *   线程  继承Thread 内嵌入Runnable接口  重写run方法
 *          JavaOOP---缺点：Java支持单继承，子类继承Thread，
 *          无法拓展，不仅线程，其他集合，继承其他类，只具备线程功能
 *          启动线程方法  start()----线程生命周期
 *          缺点：线程创建不明确
 *         实现Runnable  真正的线程运行---定义run方法，线程运行状态；
 *         优点：继承该可以实现--拓展性高
 *         缺点：线程创建不方便--项目：步骤逻辑清晰
 * 第三种：匿名内部类实现线程--->Lambda表达式
 *
 *   JavaOOP:封装---内部类：成员内部类，方法内部类，匿名内部类，静态内部类
 *    匿名内部类创建方式
 *    对象  引用=new 对象(){};
 *    匿名内部类--创建一次---子实现类实例化一次Thread/Runnable
 *               优点：省去创建子类对象名称---接口创建，抽象类创建！
 */

public class TR {
    public static void main(String[] args) {
        //1.类只需要实例化一次：匿名内部类---Thread
        Thread t1=new Thread(){
            public void run() {
                for(int i=1;i<100;i++){
                    System.out.println("悲伤有一万种，孤独的人相同");
                }
            }
        };
        t1.start();

        //2.类只需要实例化一次，匿名内部类--Runnable
        Thread t2=new Thread(new  Runnable(){
            public void run() {
                for(int i=1;i<100;i++){
                    System.out.println("故事的小黄花");
                }
            }
        });
        t2.start();

    }
}